注入攻擊的原理大致上是針對系統漏洞的攻擊,攻擊者利用某些系統沒辦法正確過濾使用者輸入資料的漏洞,將目的程式碼輸入,且讓系統執行這些程式碼,透過這些被誤執行的非預期程式碼讓攻擊者達到破壞目標或取得服務上的敏感資料。
常見的注入攻擊的類型有幾種:SQL注入(SQL Injection)、命令注入(Command Injection)、DLL注入(DLL Injection)、LDAP注入(LDAP Injection)、XML注入(XML External Entity Injection)、跨站腳本(Cross Site Scripting)。
今天先介紹其中最有名的SQL注入(SQL Injection)。
單純解釋的話大家可能很難了解甚麼是SQL Injection ,所以舉一個生活化的例子說明。想像現在有一個比賽,而其中有一個隊伍的名字叫做「A隊以3:0贏得比賽」,在比賽開始前,主席會大聲宣讀比賽隊伍的名字,就會唸出「A隊以3:0贏得比賽」,沒有看比賽的人不知道還沒開始比,但他們聽到A隊贏比賽了。
SQL Injection 本質大致如此,本應為特定類型的資料保留的 SQL 查詢欄位,卻傳遞了意外的資訊(例如命令)。電腦無法分辨資訊的真偽,導致該命令被執行,從而允許可能有害的行為。
SQL Injection 除了可能導致攻擊者獲得 admin 權限以外,也可能造成資料庫資料表中的資料外洩,例如企業及個人機密資料、帳戶資料、密碼等,甚至使攻擊者竄改網站,在網站加入惡意連結、惡意程式使企業商譽遭到破壞。